package com.atguigu.tingshu.account.service;

import com.atguigu.tingshu.model.account.UserAccount;
import com.atguigu.tingshu.model.account.UserAccountDetail;
import com.atguigu.tingshu.vo.account.AccountLockResultVo;
import com.atguigu.tingshu.vo.account.AccountLockVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.math.BigDecimal;

/**
 * @author Petrichor
 */
public interface UserAccountService extends IService<UserAccount> {

    /**
     * @description: 新增账户信息
     * @author Petrichor
     * @date 2023/12/23 20:44
     * @param userId 新增的用户id
    **/
    void addAccount(String userId);


    /**
     * 获取账号可用金额
     * @author Petrichor
     * @date 2024/1/7 23:00
     * @return 登录用户 账号可用金额
     **/
    BigDecimal getAvailableAmount();
    /**
     * 检查并锁定可用余额
     * @author Petrichor
     * @date 2024/1/8 19:47
     * @param accountLockVo 锁定金额对象
     * @return AccountLockResultVo 锁定金额返回对象
     **/
    AccountLockResultVo checkAndLock(AccountLockVo accountLockVo);
    /**
     * 扣减锁定金额
     * @author Petrichor
     * @date 2024/1/9 19:07
     * @param orderNo 订单号
     * @return NULL
    **/
    void minus(String orderNo);
    /**
     * 解除锁定金额
     * @author Petrichor
     * @date 2024/1/9 19:07
     * @param orderNo 订单号
     * @return NULL
     **/
    void unlock(String orderNo);
    /**
     * 更新余额
     * @author Petrichor
     * @date 2024/1/11 11:31
     * @param userId 用户id
     * @param rechargeAmount 充值金额
     * @param orderNo 订单号
     * @param accountTradeTypeDeposit 账号交易类型-充值
     * @param title 交易标题=充值
    **/
    void add(Long userId, BigDecimal rechargeAmount, String orderNo, String accountTradeTypeDeposit, String title);
    /**
     * 获取登录用户的记录 根据用户id 交易类型
     * @author Petrichor
     * @date 2024/1/11 11:45
     * @param page 当前页码
     * @param limit 每页记录数
     * @return 当前登录用户的充值记录
     **/
    IPage<UserAccountDetail> findUserTradeTypePage(Long page, Long limit,Long tradeType);
}
